/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cip.esymons.eventos.be;

import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
import org.cip.esymons.general.be.ConsejoDepartamental;

/**
 *
 * @author oscar
 */
@Entity
@Table(name = "eca_preevento")
@NamedQueries({@NamedQuery(name = "Preevento.findAll", query = "SELECT p FROM Preevento p"), @NamedQuery(name = "Preevento.findByPreCodigo", query = "SELECT p FROM Preevento p WHERE p.preCodigo = :preCodigo"), @NamedQuery(name = "Preevento.findByTranumTramite", query = "SELECT p FROM Preevento p WHERE p.tranumTramite = :tranumTramite"), @NamedQuery(name = "Preevento.findByPreEstado", query = "SELECT p FROM Preevento p WHERE p.preEstado = :preEstado"), @NamedQuery(name = "Preevento.findByPrefechaRegistro", query = "SELECT p FROM Preevento p WHERE p.prefechaRegistro = :prefechaRegistro"), @NamedQuery(name = "Preevento.findByPrefechaActualizacion", query = "SELECT p FROM Preevento p WHERE p.prefechaActualizacion = :prefechaActualizacion"), @NamedQuery(name = "Preevento.findByPreNombre", query = "SELECT p FROM Preevento p WHERE p.preNombre = :preNombre"), @NamedQuery(name = "Preevento.findByPrefechaFin", query = "SELECT p FROM Preevento p WHERE p.prefechaFin = :prefechaFin"), @NamedQuery(name = "Preevento.findByPrefechaInicio", query = "SELECT p FROM Preevento p WHERE p.prefechaInicio = :prefechaInicio"), @NamedQuery(name = "Preevento.findByPreTipo", query = "SELECT p FROM Preevento p WHERE p.preTipo = :preTipo")})
public class Preevento implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "pre_codigo")
    private Integer preCodigo;
    @Basic(optional = false)
    @Column(name = "tra_numTramite")
    private long tranumTramite;
    @Basic(optional = false)
    @Column(name = "pre_estado")
    private String preEstado;
    @Column(name = "pre_fechaRegistro")
    @Temporal(TemporalType.DATE)
    private Date prefechaRegistro;
    @Column(name = "pre_fechaActualizacion")
    @Temporal(TemporalType.DATE)
    private Date prefechaActualizacion;
    @Column(name = "pre_nombre")
    private String preNombre;
    @Column(name = "pre_nroModulos")
    private Integer preNroModulos = 1;
    @Column(name = "pre_fechaFin")
    @Temporal(TemporalType.DATE)
    private Date prefechaFin;
    @Column(name = "pre_fechaInicio")
    @Temporal(TemporalType.DATE)
    private Date prefechaInicio;
    @Column(name = "pre_tipo")
    private String preTipo;
    @Column(name = "pre_nroVecesTramitado")
    private Integer preNroVecesTramitado;
    @Column(name = "preAprobacion")
    private Integer preAprobacion;//0=DESAPROBADO,1=APROB. PRESUPUESTO,2=APROB. CONTENIDO,3=APROB TODO.
    @Column(name = "pre_utilidad")
    private Double preUtilidad;
    @Column(name = "pre_ingresos")
    private Double preIngresos;
    @Column(name = "pre_egresos")
    private Double preEgresos;
    @Column(name = "pre_activo")
    private Boolean preActivo;
    @Column(name = "pre_observacionContenido")
    private String preObservacionContenido;
    @Column(name = "pre_observacionPresupuesto")
    private String preObservacionPresupuesto;
    @OneToOne(cascade = CascadeType.ALL, mappedBy = "preevento", fetch = FetchType.LAZY)
    private Evento evento;
    @OneToMany(mappedBy = "eveCodigo", fetch = FetchType.LAZY)
    private List<ReservaAmbiente> reservaAmbienteCollection;
    @OneToMany(mappedBy = "preCodigo", fetch = FetchType.LAZY)
    private List<OrganizadorEvento> orgizadorEventoCollection;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "preCodigo", fetch = FetchType.LAZY)
    private List<InstructorEvento> instructorEventoCollection;
    @JoinColumn(name = "tev_codigo", referencedColumnName = "tev_codigo")
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private TipoEvento tevCodigo;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "preevento", fetch = FetchType.LAZY)
    private List<ModeloPresupuesto> presupuestoCollection;
    @Transient
    private boolean estado = false;//Curso=true o Evento=false
    @Transient
    private String fechaInicio;
    @Transient
    private String fechaFin;
    @Column(name = "uwe_codigo")
    private Integer uweCodigo;
    @Lob
    @Column(name = "pre_detalle")
    private String preDetalle;
    @Column(name = "preCantidadColegiados")
    private Integer preCantidadColegiados;
    @Column(name = "pre_turno")
    private String preTurno;
    @OneToMany(mappedBy = "preCodigo", fetch = FetchType.LAZY)
    private List<DetalleIngresosEventos> detalleIngresosEventosList;
    @Column(name = "pre_vacante_temporal")
    private Integer preVacanteTemporal;
    @Column(name = "pre_nro_meses_presupuesto")
    private Integer nroMesesPresupuesto;
    //Lizardo
    @Transient
    private ConsejoDepartamental consejo;
    //Lizardo para la casilla de verificacion por true/false
    @Transient
    private String casilla;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "preCodigo", fetch = FetchType.LAZY)
    private List<ModuloCurso> moduloCollection;
    @Transient
    private Integer nroCaracteres;

    public Preevento() {
    }

    public String getEstadoEvento() {
        String strEstado = null;
        Integer intEstado = (evento != null) ? evento.getEveEstado() : -1;
        switch (intEstado) {
            case -1 : strEstado = "EN PROCESO"; break;
            case 0  : strEstado = "REALIZADO";   break;
            case 1  : strEstado = "EN PROCESO";  break;
        }
        return strEstado;
    }

    public String getPreNombreCorto() {
        String nombre = preNombre.toString();
        String nombreCorto = "";
        nroCaracteres = (nroCaracteres != null) ? nroCaracteres : 0;
        nroCaracteres = (nroCaracteres != 0) ? nroCaracteres : 25;
        for (int i=0; i<nombre.length(); i++) {
            if (i < nroCaracteres) {
                nombreCorto += nombre.substring(i, i+1);
            } else {
                break;
            }
        }
        if ( nombre.length() > nombreCorto.length() ) nombreCorto += "...";
        return nombreCorto;
    }

    public Integer getNroMesesPresupuesto() {
        return nroMesesPresupuesto;
    }

    public void setNroMesesPresupuesto(Integer nroMesesPresupuesto) {
        this.nroMesesPresupuesto = nroMesesPresupuesto;
    }

    public Integer getPreVacanteTemporal() {
        return preVacanteTemporal;
    }

    public void setPreVacanteTemporal(Integer preVacanteTemporal) {
        this.preVacanteTemporal = preVacanteTemporal;
    }

    public Integer getNroCaracteres() {
        return nroCaracteres;
    }

    public void setNroCaracteres(Integer nroCaracteres) {
        this.nroCaracteres = nroCaracteres;
    }

    public List<DetalleIngresosEventos> getDetalleIngresosEventosList() {
        return detalleIngresosEventosList;
    }

    public void setDetalleIngresosEventosList(List<DetalleIngresosEventos> detalleIngresosEventosList) {
        this.detalleIngresosEventosList = detalleIngresosEventosList;
    }

    public List<ModuloCurso> getModuloCollection() {
        return moduloCollection;
    }

    public void setModuloCollection(List<ModuloCurso> moduloCollection) {
        this.moduloCollection = moduloCollection;
    }

    public String getPreTurno() {
        return preTurno;
    }

    public void setPreTurno(String preTurno) {
        this.preTurno = preTurno;
    }

    public void setConsejo(ConsejoDepartamental consejo) {
        this.consejo = consejo;
    }

    public ConsejoDepartamental getConsejo() {
        return consejo;
    }

    public String getCasilla() {
        return casilla;
    }

    public void setCasilla(String casilla) {
        this.casilla = casilla;
    }

    public Preevento(Integer preCodigo) {
        this.preCodigo = preCodigo;
    }

    public Preevento(Integer preCodigo, long tranumTramite, String preEstado) {
        this.preCodigo = preCodigo;
        this.tranumTramite = tranumTramite;
        this.preEstado = preEstado;
    }

    public Integer getPreCantidadColegiados() {
        return preCantidadColegiados;
    }

    public void setPreCantidadColegiados(Integer preCantidadColegiados) {
        this.preCantidadColegiados = preCantidadColegiados;
    }

    public String getPreObservacionContenido() {
        return preObservacionContenido;
    }

    public void setPreObservacionContenido(String preObservacionContenido) {
        this.preObservacionContenido = preObservacionContenido;
    }

    public String getPreObservacionPresupuesto() {
        return preObservacionPresupuesto;
    }

    public void setPreObservacionPresupuesto(String preObservacionPresupuesto) {
        this.preObservacionPresupuesto = preObservacionPresupuesto;
    }

    public Integer getPreNroVecesTramitado() {
        return preNroVecesTramitado;
    }

    public void setPreNroVecesTramitado(Integer preNroVecesTramitado) {
        this.preNroVecesTramitado = preNroVecesTramitado;
    }

    public Integer getPreAprobacion() {
        return preAprobacion;
    }

    public void setPreAprobacion(Integer preAprobacion) {
        this.preAprobacion = preAprobacion;
    }

    public Boolean getPreActivo() {
        return preActivo;
    }

    public void setPreActivo(Boolean preActivo) {
        this.preActivo = preActivo;
    }

    public Double getPreEgresos() {
        return preEgresos;
    }

    public void setPreEgresos(Double preEgresos) {
        this.preEgresos = preEgresos;
    }

    public Double getPreIngresos() {
        return preIngresos;
    }

    public void setPreIngresos(Double preIngresos) {
        this.preIngresos = preIngresos;
    }

    public Integer getPreCodigo() {
        return preCodigo;
    }

    public Integer getPreNroModulos() {
        return preNroModulos;
    }

    public void setPreNroModulos(Integer preNroModulos) {
        this.preNroModulos = preNroModulos;
    }

    public Double getPreUtilidad() {
        return preUtilidad;
    }

    public void setPreUtilidad(Double preUtilidad) {
        this.preUtilidad = preUtilidad;
    }

    public boolean getEstado() {

        return estado;
    }

    public String getPreDetalle() {
        return preDetalle;
    }

    public void setPreDetalle(String preDetalle) {
        this.preDetalle = preDetalle;
    }

    public Integer getUweCodigo() {
        return uweCodigo;
    }

    public void setUweCodigo(Integer uweCodigo) {
        this.uweCodigo = uweCodigo;
    }

    public String getFechaFin() {
        SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
        fechaFin = formato.format(prefechaFin);
        return fechaFin;
    }

    public void setFechaFin(String fechaFin) {
        this.fechaFin = fechaFin;
    }

    public String getFechaInicio() {
        SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
        fechaInicio = formato.format(prefechaInicio);
        return fechaInicio;
    }

    public void setFechaInicio(String fechaInicio) {
        this.fechaInicio = fechaInicio;
    }

    public void setEstado(boolean estado) {
        if (estado) {
            preTipo = "CU";
        } else {
            preTipo = "EV";
        }
        this.estado = estado;
    }

    public void setPreCodigo(Integer preCodigo) {
        this.preCodigo = preCodigo;
    }

    public long getTranumTramite() {
        return tranumTramite;
    }

    public void setTranumTramite(long tranumTramite) {
        this.tranumTramite = tranumTramite;
    }

    public String getPreEstado() {
        return preEstado;
    }

    public void setPreEstado(String preEstado) {
        this.preEstado = preEstado;
    }

    public Date getPrefechaRegistro() {
        return prefechaRegistro;
    }

    public void setPrefechaRegistro(Date prefechaRegistro) {
        this.prefechaRegistro = prefechaRegistro;
    }

    public Date getPrefechaActualizacion() {
        return prefechaActualizacion;
    }

    public void setPrefechaActualizacion(Date prefechaActualizacion) {
        this.prefechaActualizacion = prefechaActualizacion;
    }

    public String getPreNombre() {
        return preNombre;
    }

    public void setPreNombre(String preNombre) {
        this.preNombre = preNombre;
    }

    public Date getPrefechaFin() {
        return prefechaFin;
    }

    public void setPrefechaFin(Date prefechaFin) {
        SimpleDateFormat formato = new SimpleDateFormat("ddMMyyyy");
        fechaFin = formato.format(prefechaFin);
        this.prefechaFin = prefechaFin;
    }

    public Date getPrefechaInicio() {
        return prefechaInicio;
    }

    public void setPrefechaInicio(Date prefechaInicio) {
        SimpleDateFormat formato = new SimpleDateFormat("ddMMyyyy");
        fechaInicio = formato.format(prefechaInicio);
        this.prefechaInicio = prefechaInicio;
    }

    public String getPreTipo() {
        return preTipo;
    }

    public void setPreTipo(String preTipo) {
        this.preTipo = preTipo;
    }

    public Evento getEvento() {
        return evento;
    }

    public void setEvento(Evento evento) {
        this.evento = evento;
    }

    public List<ReservaAmbiente> getReservaAmbienteCollection() {
        return reservaAmbienteCollection;
    }

    public void setReservaAmbienteCollection(List<ReservaAmbiente> reservaAmbienteCollection) {
        this.reservaAmbienteCollection = reservaAmbienteCollection;
    }

    public List<OrganizadorEvento> getOrgizadorEventoCollection() {
        return orgizadorEventoCollection;
    }

    public void setOrgizadorEventoCollection(List<OrganizadorEvento> orgizadorEventoCollection) {
        this.orgizadorEventoCollection = orgizadorEventoCollection;
    }

    public List<InstructorEvento> getInstructorEventoCollection() {
        return instructorEventoCollection;
    }

    public void setInstructorEventoCollection(List<InstructorEvento> instructorEventoCollection) {
        this.instructorEventoCollection = instructorEventoCollection;
    }

    public TipoEvento getTevCodigo() {
        return tevCodigo;
    }

    public void setTevCodigo(TipoEvento tevCodigo) {
        this.tevCodigo = tevCodigo;
    }

    public List<ModeloPresupuesto> getPresupuestoCollection() {
        return presupuestoCollection;
    }

    public void setPresupuestoCollection(List<ModeloPresupuesto> presupuestoCollection) {
        this.presupuestoCollection = presupuestoCollection;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (preCodigo != null ? preCodigo.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Preevento)) {
            return false;
        }
        Preevento other = (Preevento) object;
        if ((this.preCodigo == null && other.preCodigo != null) || (this.preCodigo != null && !this.preCodigo.equals(other.preCodigo))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "org.cip.esymons.eventos.be.Preevento[preCodigo=" + preCodigo + "]";
    }
}
